package com.hfb.mashibing.alip8.mq.rabbit.work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 在工作模式中，
 * 生产者发送消息
 */

public class WorkProducer {
    public static final String QUEUE_NAME = "work_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 1、创建连接工厂（设置rabbitMQ的参数）
        // 主机：默认localhost
        // 端口：默认5672
        // 虚拟主机：默认 /
        // 用户名/密码 默认
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("rabbitmq.dev.baiwang-inner.com");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        // 2、创建连接
        Connection connection = connectionFactory.newConnection();
        // 3、创建频道
        Channel channel = connection.createChannel();
        // 4、声明队列
        /**
         * 参数1-队列名称
         * 参数2-是否是持久化队列（消息回持久化在服务器上）
         * 参数3-是否独占本连接
         * 参数4-是否在不使用的时候队列自动删除
         * 参数5-其他参数
         */
        channel.queueDeclare(QUEUE_NAME,true,false,false,null);
        // 5、发送消息
        for (int i=0;i<30;i++) {
            final String msg = "Hello,你好，RabbitMq。工作模式 +"+i;
            //参数1-交换机，空串代表使用默认路由器
            //参数2-路由key，在简单模式中，可以使用队列名称
            //参数3-消息其他属性
            //参数4-消息内容
            channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
            System.err.println(String.format("[%s]已发送！",msg));
        }

        // 6、关闭资源
        channel.close();
        connection.close();
    }

}
